/* 实现一个字符串匹配的算法,从字符串 S 中,查找是否存在字符串 T,若存在返回所在位置,不存在返回 -1!(如果不能基于indexOf/includes等内置的方法,你会如何处理呢？) */
/* 
  我的方法：
  let S = 'aaaabc';
  let T = 'aabca';
  function indexof(S,T) {
    let j = 0;
    let n = 0;
    let obj = {};
    obj.str = '';
    for (let i = 0; i < S.length; i++) {
      if(S[i] === T[j]) {
        obj.str += S[i];
        j++;
        if(obj.str === T) {
          return i - T.length + 1;
        }
      } else {
        obj.str = '';
        j = 0;
        i = n++;
      }
    }
    if(obj.str !== T) {
      console.log('obj.str = ' + obj.str,'T = '+ T);
      return -1;
    }
  } 
  console.log(indexof(S,T)); 
*/
// 三元运算符中不能出现 return break continue 等关键词,但是可以return 一个三目运算符表达式


/*老师的方法一:*/
/* !function() {
function myIndexOf(T) {
let Slen = this.length,
Tlen = T.length,
res = -1;
if(Slen < Tlen) {
return -1;
}
for(let i = 0; i <= Slen - Tlen; i++) {
if(T === this.substr(i,Tlen)) {
res = i;
break;
}
}
return res;
}
String.prototype.myIndexOf = myIndexOf;
}();
let S = 'zhufengpeixun';
let T = 'pei';
console.log(S.myIndexOf(T)); */
/* 老师的方法二:*/
~function() {
  function myIndexOf(T) {
    let reg = new RegExp(T);
    let rule = reg.exec(this);
    if(rule) {
      //不成立时rule为null
      return rule.index;
    } else {
      return -1;
    }
  }
  String.prototype.myIndexOf = myIndexOf;
}();
let S = 'zhufnegpeixun';
let T = 'pei';
console.log(S.myIndexOf(T));